package com.yunzan.sync_netty;

import com.google.gson.Gson;
import com.yunzan.sync_netty.model.data.BraceletsData;
import com.yunzan.utils.Hex;
import com.yunzan.utils.StaticUtils;

import java.util.Date;

/**
 * 手环信息的处理
 */
public class BraceletsHandler {

    public BraceletsData accept(Object msg) {
        BraceletsData braceletsData = null;
        if (msg instanceof String) {
            braceletsData = new BraceletsData(); // 手环数据
            String text = ((String) msg).trim();
            text=text.replace("[","");
            text=text.replace("]","");
            String[] texts = text.split("\\*");
            braceletsData.setNode(texts[1]);
            String[] datas = texts[3].split("\\,");
            setAllData(braceletsData, datas[0], datas);
        }
        return braceletsData;
    }

    /***
     * 处理所有的数据
     */
    public void setAllData(BraceletsData braceletsData, String code, String[] datas) {
        String command = code;
        if (command.equals("BLE")) {  //上传蓝牙地址
            braceletsData.setRouterMac(havRouterMac(datas, command));
        }
        if (command.equals("Lk")) {  // 心跳包

        }
        if (command.equals("KA")) {  // 日期，步数,翻滚次数,电量百分数,车载里程数(km)
            braceletsData.setStep(havStep(datas, command));// 步数
            braceletsData.setBattery(havBattery(datas, command));// 电量
        }
        if (command.equals("UD")) {  // 移动联通位置信息
            braceletsData.setStep(havStep(datas, command));// 步数
            braceletsData.setBattery(havBattery(datas, command));// 电量
            braceletsData.setPosition(havPosition(datas, command)); //  位置
            braceletsData.setRssi(havRssi(datas, command));// 信号强度
            braceletsData.setWearStatus(havWearStatus(datas, command)); // 手表状态
            braceletsData.setSos(havSos(datas, command));  //  报警
        }

        if (command.equals("UD_CDMA")) {  //电信位置信息
            braceletsData.setStep(havStep(datas, command));// 步数
            braceletsData.setBattery(havBattery(datas, command));// 电量
            braceletsData.setPosition(havPosition(datas, command)); //  位置
            braceletsData.setRssi(havRssi(datas, command));// 信号强度
            braceletsData.setWearStatus(havWearStatus(datas, command)); // 手表状态
            braceletsData.setSos(havSos(datas, command));  //  报警
        }

        if (command.equals("UP")) {  //  位置信息
            braceletsData.setPosition(havPosition(datas, command)); //  位置

        }
        if (command.equals("AL")) {  //  移动联通报警
            braceletsData.setStep(havStep(datas, command));// 步数
            braceletsData.setBattery(havBattery(datas, command));// 电量
            braceletsData.setPosition(havPosition(datas, command)); //  位置
            braceletsData.setRssi(havRssi(datas, command));// 信号强度
            braceletsData.setWearStatus(havWearStatus(datas, command)); // 手表状态
            braceletsData.setSos(havSos(datas, command));  //  报警
        }
        if (command.equals("AL_CDMA")) {  //  电信报警

        }

        if (command.equals("ALARM")) {  // 智能机发送报警
            braceletsData.setPosition(havPosition(datas, command)); //  位置
        }
        if (command.equals("heart")) {  // 心率上传
            braceletsData.setHeartrate(havHeartrate(datas, command));  // 心率
        }
        if (command.equals("temp")) {  // 温度上传
            braceletsData.setTemperature(havTemperature(datas, command));  //  体温
        }
        if (command.equals("bldstart")) {  // 血压
        }
        if (command.equals("bphrt")) {  // 血压和心率同时上传

        }
        if (command.equals("oxygen")) {  // 血氧
            braceletsData.setBloodOxygen(havBloodOxygen(datas, command));  //  体温

        }
           braceletsData.setHavBatchData("0");
        if(command.equals("SHUP")){  // 批量数据  批量心率/步数
        Integer[]  bacthTep=new Integer[100];
        Integer[]  bacthHreat=new  Integer[100];
        for (int i=0;i<100;i++){
            bacthTep[i]=Integer.parseInt(datas[i+3]);
            bacthHreat[i]=Integer.parseInt(datas[i+103]);
        }
            braceletsData.setHavBatchData("1");
            braceletsData.setBatchStep(bacthTep);
            braceletsData.setBatchHeart(bacthHreat);
        }

        braceletsData.setTimestamp(new Date().getTime()); // 是时间戳
    }

    // 当前信号强度
    public Integer havRssi(String[] datas, String command) {
        if (command.equals("UD_CDMA")) {
            return Integer.parseInt(datas[12]);
        }
        if (command.equals("UD")) {
            return Integer.parseInt(datas[12]);
        }
        return 0;
    }

    // 心率
    public Integer havHeartrate(String[] datas, String command) {
        if (command.equals("heart")) {
            return Integer.parseInt(datas[1]);
        }
            return 0;
    }

    // 手环电量
    public Integer havBattery(String[] datas, String command) {
        if (command.equals("UD_CDMA")) {
            return Integer.parseInt(datas[13]);
        }
        if (command.equals("UD")) {
            return Integer.parseInt(datas[13]);
        }
        if (command.equals("KA")) {
            return Integer.parseInt(datas[4]);
        }
        return 0;
    }

    // 上报数据蓝牙路由地址
    public String havRouterMac(String[] datas, String command) {
        return command.equals("BLE") ? datas[1] : "";
    }

    // 手表id
    public String havNode(String[] datas, String command) {
        return null;
    }

    // 预留字段
    public Integer havDbp(String[] datas, String command) {
        return 0;
    }

    // sos 报警
    public Integer havSos(String[] datas, String command) {
        if (command.equals("UD_CDMA")) {
            String hex_text = datas[16];
            return getSos(hex_text);
        }
        if (command.equals("UD")||command.equals("AL")) {
            String hex_text = datas[16];
            return getSos(hex_text);
        }
        return 0;
    }

    // 体温
    public Integer havTemperature(String[] datas, String command) {
        if (command.equals("wdstart")) {
            return Integer.parseInt(datas[1]);
        }
        return 0;
    }

    // 设备类型
    public String havModel(String[] datas, String command) {
        return null;
    }

    //  步数
    public Integer havStep(String[] datas, String command) {
        if (command.equals("UD_CDMA")) {
            return Integer.parseInt(datas[14]);
        }
        if (command.equals("UD")||command.equals("AL")) {
            return Integer.parseInt(datas[14]);
        }
        if (command.equals("KA")) {
            return Integer.parseInt(datas[2]);
        }
        return 0;
    }

    // 手表位置
    public String havPosition(String[] datas, String command) {
        if (command.equals("ALARM")) {  // 智能机
            String code=datas[1];
            return datas[4] + "," + datas[3];
        }
        if (command.equals("UP")) {
            return datas[4] + "," + datas[3];
        }
        if (command.equals("UD_CDMA")) {
            return datas[6] + "," + datas[4];
        }
        if (command.equals("UD")||command.equals("AL")) {
            return datas[6] + "," + datas[4];
        }
        return null;
    }

    // 数据上报时间戳
    public Long havTimestamp(String[] datas, String command) {
        return 0L;
    }

    // 手环佩戴状态
    public Integer havWearStatus(String[] datas, String command) {
        if (command.equals("UD_CDMA")) {
            String hex_text = datas[16];
            return getWearStatus(hex_text);
        }
        if (command.equals("UD")||command.equals("AL")) {
            String hex_text = datas[16];
            return getWearStatus(hex_text);
        }
        return 0;
    }

    // 血氧
    public Integer havBloodOxygen(String[] datas, String command) {
        if (command.equals("oxygen")) {
            return Integer.parseInt(datas[1]);
        }
        return 0;
    }





    /***
     * 通过16进制得到 手环状态吗
     * @return
     */

    public static int getWearStatus(String hexStr) {
        String t = Hex.byteArrToBinStr(Hex.parseHexStr2Byte(hexStr));
        String[] cc = t.split(",");
        int len = cc[3].length() - 1;  // 从左边数从0  开始数
        return len;
    }

    /**
     * 通过16进制得到得到报警状态
     *
     * @param hexStr
     * @return
     */
    public static int getSos(String hexStr) {
        String t = Hex.byteArrToBinStr(Hex.parseHexStr2Byte(hexStr));
        String[] cc = t.split(",");
        int len = 0;
        if (!cc[1].equals("0")) {
            len = cc[1].length() + 16 - 1;  // 从左边数从0  开始数
        }
        return len;
    }



}
